﻿#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

//电话号码字母组合OJ
//class Solution {
//public:
//    string Maptable[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
//
//    vector<string> RecTrave(string& digits, int sub, string combstr, vector<string>& vs)
//    {
//        if (sub == digits.size())
//        {
//            vs.push_back(combstr);
//            return vs;
//        }
//        
//        int nums = digits[sub] - '0';
//        string& str = Maptable[nums];
//        for (auto& ch : str)
//        {
//
//            RecTrave(digits, sub + 1,combstr+ch ,vs);
//        }
//
//        return vs;
//    }
//    vector<string> letterCombinations(string digits)
//    {
//        if (digits.size() == 0)
//            return vector<string>();
//
//        vector<string> vs;
//        return RecTrave(digits, 0, "", vs);
//    }
//};

//只出现一次的数ii OJ
//class Solution
//{
//public:
//    int singleNumber(vector<int>& nums)
//    {
//        if (nums.size() != 1)
//        {
//            sort(nums.begin(), nums.end());
//            if (nums[0] != nums[1])
//            {
//                return nums[0];
//            }
//            else if (nums[nums.size() - 2] != nums[nums.size() - 1])
//            {
//                return nums[nums.size() - 1];
//            }
//            for (int sub = 1; sub < nums.size() - 1; ++sub)
//            {
//                if (nums[sub - 1] != nums[sub] && nums[sub] != nums[sub + 1])
//                    return nums[sub];
//            }
//        }
//        return nums[0];
//    }
//};



//只出现一次的数iii OJ
//class Solution {
//public:
//    vector<int> singleNumber(vector<int>& nums)
//    {
//        int nums1 = 0, nums2 = 0, tmp = 0;
//        for (int sub = 0; sub < nums.size(); ++sub)
//        {
//            tmp ^= nums[sub];
//        }
//
//        int sub = 0;
//        for (; sub < 32; ++sub)
//        {
//            if (tmp & 1)
//                break;
//
//            tmp >>= 1;
//        }
//        for (auto& n : nums)
//        {
//            if (n >> sub & 1)
//            {
//                nums1 ^= n;
//            }
//            else
//            {
//                nums2 ^= n;
//            }
//        }
//        vector<int> v;
//        v.push_back(nums1);
//        v.push_back(nums2);
//        return v;
//    }
//};


//class Solution
//{
//public:
//    vector<int> singleNumber(vector<int>& nums)
//    {
//        vector<int> v;
//        if (nums.size() != 1)
//        {
//            sort(nums.begin(), nums.end());
//            for (int sub = 1; sub < nums.size() - 1; ++sub)
//            {
//                if (nums[sub - 1] != nums[sub] && nums[sub] != nums[sub + 1])
//                    v.push_back(nums[sub]);
//            }
//            if (nums[0] != nums[1])
//            {
//                v.push_back(nums[0]);
//            }
//            if (nums[nums.size() - 2] != nums[nums.size() - 1])
//            {
//                v.push_back(nums[nums.size() - 1]);
//            }
//        }
//        else
//        {
//            v.push_back(nums[0]);
//        }
//        return v;
//    }
//};



